package com.jdd.enterprise.util;
import com.jdd.enterprise.api.vo.PageResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * @Brief 后端分页数据类生成工具
 * @Author chenyl
 * @Date 2021-12-07
 * @Version 1.0.0
 */
public class PageUtil {
    /**
     * 自定义分页返回对象
     *
     * @param curPage  当前页码
     * @param pageSize 每条条数
     * @param <T>      对应的实体类
     * @return PageVO对象
     */
    public static <T> PageResponse<T> createPage(Long curPage, Long pageSize) {
        return createPage((long) 0, curPage, pageSize, new ArrayList<>());
    }
    /**
     * 自定义分页返回对象
     *
     * @param totalCount 总条数
     * @param curPage    当前页码
     * @param pageSize   每条条数
     * @param data       数据结果集
     * @param <T>        对应的实体类
     * @return PageVO对象
     */
    public static <T> PageResponse<T> createPage(Long totalCount, Long curPage, Long pageSize, List<T> data) {
        // 初始化返回对象
        PageResponse<T> vo = new PageResponse<>();
        // 设置总条数
        vo.setTotalCount(totalCount);
        // 设置每页条数
        vo.setPageSize(pageSize);
        // 设置当前页码
        vo.setCurrentPage(curPage);
        // 设置数据
        vo.setList(data);
        // 计算并设置总页数
        vo.setTotalPage((long) Math.ceil((double) totalCount / (double) pageSize));
        return vo;
    }
    /**
     * 更新分页对象数据
     *
     * @param vo         原始对象
     * @param totalCount 数据总条数
     * @param data       要返回的数据集合
     * @param <T>        对应的实体类
     */
    public static <T> void refreshData(PageResponse<T> vo, Long totalCount, List<T> data) {
        // 设置总条数
        vo.setTotalCount(totalCount);
        // 设置返回的数据集合
        vo.setList(data);
        // 计算并设置总页数
        vo.setTotalPage((long) Math.ceil((double) totalCount / (double) vo.getPageSize()));
    }
}
